package com.promise.jokerdream.response.parser

import com.promise.jokerdream.response.phone.FightFactionMineXmlResponse
import org.jsoup.Jsoup

/**
 * 挑战矿洞XML解析器
 * 专门用于解析大乐斗矿洞挑战相关的XML数据
 * 基于Jsoup实现
 */
class FightFactionMineXmlParser : BaseXmlParser<FightFactionMineXmlResponse>() {
    
    /**
     * 解析矿洞挑战XML数据
     * @param xmlString XML字符串
     * @return 解析结果
     */
    fun parseFightFactionMineXml(xmlString: String): XmlParseResult<FightFactionMineXmlResponse> {
        return parseXml(xmlString)
    }
    
    /**
     * 实现基类的具体解析逻辑
     * @param xmlString XML字符串
     * @return 解析后的矿洞挑战数据
     */
    override fun doParse(xmlString: String): FightFactionMineXmlResponse {
        var actionResult = ""
        var isPass = false
        
        try {
            // 统一替换<br />为<br/>，确保Jsoup能正确识别
            val normalizedXml = xmlString.replace(Regex("<br\\s*/?>"), "<br/>")
            val doc = Jsoup.parse(normalizedXml)
            val divElement = doc.selectFirst("div#id")
            
            if (divElement != null) {
                val pElement = divElement.selectFirst("p")
                if (pElement != null) {
                    // 使用select查找所有br标签
                    val textElements = pElement.textNodes()

                    // 根据位置解析：第2个br标签的内容作为actionResult
                    if (textElements.size >= 2) {
                        val content = textElements[1]
                        actionResult = content.text()
                            .replace(Regex("\\s+"), " ")
                            .trim()
                        // 其实就是等于2
                        if (textElements.size < 3) {
                            isPass = true
                        }
                    }
                }
            }
        } catch (e: Exception) {
            // 解析失败，返回空数据
        }
        
        return FightFactionMineXmlResponse(
            actionResult = actionResult,
            isPass = isPass
        )
    }
}